#include "mcu_gpio.h"
#include "py32f0xx.h"
#include "PY32_Config.h"
#include "typedef.h"




void Gpio_Init()
{
    GPIOA->ODR = _GPIO_PA_ODR;
    GPIOB->ODR = _GPIO_PB_ODR;
    GPIOC->ODR = _GPIO_PC_ODR;
    GPIOA->MODER = (_GPIO_PA0_MODE << 0) |
                (_GPIO_PA1_MODE << 2) |
                (_GPIO_PA2_MODE << 4) |
                (_GPIO_PA3_MODE << 6) |
                (_GPIO_PA4_MODE << 8) |
                (_GPIO_PA5_MODE << 10) |
                (_GPIO_PA6_MODE << 12) |
                (_GPIO_PA7_MODE << 14);
    GPIOB->MODER = (_GPIO_PB0_MODE << 0) |
                (_GPIO_PB1_MODE << 2) |
                (_GPIO_PB2_MODE << 4) |
                (_GPIO_PB3_MODE << 6) |
                (_GPIO_PB4_MODE << 8) |
                (_GPIO_PB5_MODE << 10) |
                (_GPIO_PB6_MODE << 12) |
                (_GPIO_PB7_MODE << 14);
    GPIOC->MODER = (_GPIO_PC0_MODE << 0) |
                (_GPIO_PC1_MODE << 2);
    GPIOA->OTYPER = _GPIO_PA_EN_OD;
    GPIOB->OTYPER = _GPIO_PB_EN_OD;
    GPIOC->OTYPER = _GPIO_PC_EN_OD;

    GPIOA->OSPEEDR = (_GPIO_PA0_SPEED << 0) |
                (_GPIO_PA1_SPEED << 2) |
                (_GPIO_PA2_SPEED << 4) |
                (_GPIO_PA3_SPEED << 6) |
                (_GPIO_PA4_SPEED << 8) |
                (_GPIO_PA5_SPEED << 10) |
                (_GPIO_PA6_SPEED << 12) |
                (_GPIO_PA7_SPEED << 14);
    GPIOB->OSPEEDR = (_GPIO_PB0_SPEED << 0) |
                (_GPIO_PB1_SPEED << 2) |
                (_GPIO_PB2_SPEED << 4) |
                (_GPIO_PB3_SPEED << 6) |
                (_GPIO_PB4_SPEED << 8) |
                (_GPIO_PB5_SPEED << 10) |
                (_GPIO_PB6_SPEED << 12) |
                (_GPIO_PB7_SPEED << 14);
    GPIOC->OSPEEDR = (_GPIO_PC0_SPEED << 0) |
                (_GPIO_PC1_SPEED << 2);

    GPIOA->PUPDR = (_GPIO_PA0_PUPD << 0) |
                (_GPIO_PA1_PUPD << 2) |
                (_GPIO_PA2_PUPD << 4) |
                (_GPIO_PA3_PUPD << 6) |
                (_GPIO_PA4_PUPD << 8) |
                (_GPIO_PA5_PUPD << 10) |
                (_GPIO_PA6_PUPD << 12) |
                (_GPIO_PA7_PUPD << 14);
    GPIOB->PUPDR = (_GPIO_PB0_PUPD << 0) |
                (_GPIO_PB1_PUPD << 2) |
                (_GPIO_PB2_PUPD << 4) |
                (_GPIO_PB3_PUPD << 6) |
                (_GPIO_PB4_PUPD << 8) |
                (_GPIO_PB5_PUPD << 10) |
                (_GPIO_PB6_PUPD << 12) |
                (_GPIO_PB7_PUPD << 14);
    GPIOC->PUPDR = (_GPIO_PC0_PUPD << 0) |
                (_GPIO_PC1_PUPD << 2);

    GPIOA->AFR[0] = (_GPIO_PA0_AFSEL << 0) |
                    (_GPIO_PA1_AFSEL << 4) |
                    (_GPIO_PA2_AFSEL << 8) |
                    (_GPIO_PA3_AFSEL << 12) |
                    (_GPIO_PA4_AFSEL << 16) |
                    (_GPIO_PA5_AFSEL << 20) |
                    (_GPIO_PA6_AFSEL << 24) |
                    (_GPIO_PA7_AFSEL << 28);
    
    GPIOB->AFR[0] = (_GPIO_PB0_AFSEL << 0) |
                    (_GPIO_PB1_AFSEL << 4) |
                    (_GPIO_PB2_AFSEL << 8) |
                    (_GPIO_PB3_AFSEL << 12) |
                    (_GPIO_PB4_AFSEL << 16) |
                    (_GPIO_PB5_AFSEL << 20) |
                    (_GPIO_PB6_AFSEL << 24) |
                    (_GPIO_PB7_AFSEL << 28);
    
    GPIOC->AFR[0] = (_GPIO_PC0_AFSEL << 0) |
                    (_GPIO_PC1_AFSEL << 4);

}

